﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using RRTWSEntityDSD.Dominio;
using System.Data.SqlClient;
using System.Data;
using WebServiceDSDG6.Persistencia;

namespace RRTWSNegocioDSD.Dao
{
    public class OperacionEnLineaDAO : BaseDAO<OperacionLinea, int>
    {
        public RRTWSEntityDSD.Dominio.OperacionLinea create(string uuid, double monto)
        {
            throw new NotImplementedException();
        }

        public RRTWSEntityDSD.Dominio.OperacionLinea getOperacionEnLinea(int id)
        {
            return Obtener(id);
        }


        public RRTWSEntityDSD.Dominio.OperacionLinea getOperacionEnLineaPorTicket(string ticket)
        {
            try
            {
                
                string query = "SELECT * FROM dbo.OPERACION_LINEA WHERE OPE_TICKET='"+ticket+"'";
                SqlCommand cmd = new SqlCommand(query, cnx);
                cnx.Open();

                using (SqlDataReader dr = cmd.ExecuteReader())
                {

                    while (dr.Read())
                    {
                        OperacionLinea operacion = null;
                        if (!Convert.IsDBNull(dr["OPE_ID_OPERACION"]))
                        {
                            operacion = new OperacionLinea();
                            operacion.idOperacion = int.Parse(dr["OPE_ID_OPERACION"].ToString());
                            operacion.idCliente = int.Parse(dr["CLI_ID_CLIENTE"].ToString());
                            operacion.montoTotal = Double.Parse(dr["OPE_MONTO_TOTAL"].ToString());
                            operacion.fechaOperacion = dr["OPE_FECHA_OPERACION"].ToString();
                            operacion.ticket = dr["OPE_TICKET"].ToString();
                            
                            return operacion;
                        }
                    }

                }


            }
            catch (InvalidOperationException e)
            {
                throw new InvalidOperationException("Error de conexiones : " + e.Message);
            }
            finally
            {
                cnx.Close();
            }
            return null;
        }

        public RRTWSEntityDSD.Dominio.OperacionLinea create(RRTWSEntityDSD.Dominio.OperacionLinea operacion)
        {
            
            return Crear(operacion);
        }

        public Boolean FInsertOperacionDAO(OperacionLinea bel)
        {
            bool res = false;
            cnx.Open();
            SqlCommand cmd = new SqlCommand("TRI_si_Operacion", cnx);
            cmd.CommandType = CommandType.StoredProcedure;

            //cmd.Parameters.Add("@CLI_ID_CLIENTE", SqlDbType.Int).Value = bel.IdCliente;

            cmd.Parameters.AddWithValue("@CLI_ID_CLIENTE", bel.idCliente);
            cmd.Parameters.AddWithValue("@OPE_MONTO_TOTAL", bel.montoTotal);
            cmd.Parameters.Add("@COD_GENERADO", SqlDbType.Int).Direction = ParameterDirection.Output;
            try
            {
                cmd.ExecuteNonQuery();
                bel.idOperacion = int.Parse(cmd.Parameters["@COD_GENERADO"].Value.ToString());

                res = true;
            }
            catch (InvalidOperationException e)
            {
                throw new InvalidOperationException("Error de conexiones : " + e.Message);
            }
            finally
            {
                cnx.Close();
            }

            return res;
        }

        public void FInsertEntrada(Entrada item, int ID_OPERACION)
        {


            SqlCommand cmd = new SqlCommand("TRI_si_Entrada", cnx);

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@EVE_ID_EVENTO", item.evento);
            cmd.Parameters.AddWithValue("@ENT_PRECIO", 40);
            cmd.Parameters.AddWithValue("@OPE_ID_OPERACION", ID_OPERACION);
            cmd.Parameters.AddWithValue("@ASI_ID_ASIENTO", item.idasiento);

            try
            {
                cmd.ExecuteNonQuery();

            }
            catch (InvalidOperationException e)
            {
                throw new InvalidOperationException("Error de conexiones : " + e.Message);
            }
            finally
            {
                cnx.Close();
            }
        }
    }
}